/// @tags: Math
#include <cstdio>
#include <functional>
#include <iostream>
#include <numeric>

using std::cin, std::cout, std::endl;

namespace BlueQuantum {

typedef long long ll;

constexpr int maxn = 3e6 + 2, mod = 998244353;

int qpow(ll base, int exp) {
  ll res = 1;
  while (exp) {
    if (exp & 1) res = res * base % mod;
    base = base * base % mod;
    exp >>= 1;
  }
  return res;
}

ll fac[maxn], inv[maxn];

void init(int n) {
  inv[0] = fac[0] = 1;
  for (int i = 1; i <= n; i++) fac[i] = fac[i - 1] * i % mod;
  inv[n] = qpow(fac[n], mod - 2);
  for (int i = n - 1; i >= 1; i--) inv[i] = inv[i + 1] * (i + 1) % mod;
}

ll binom(int n, int m) { return fac[n] * inv[m] % mod * inv[n - m] % mod; }

int main() {
  int r, g, b, k;
  cin >> r >> g >> b >> k;
  init(r + g + b);
  cout << fac[r + b] * inv[r - k] % mod * inv[b] % mod * inv[k] % mod *
              binom(b + g, g - k) % mod;
  return 0;
}

}  // namespace BlueQuantum

int main() {
#ifndef ONLINE_JUDGE
#ifdef LOCAL
  freopen("/tmp/CodeTmp/testdata.in", "r", stdin);
  freopen("/tmp/CodeTmp/testdata.out", "w", stdout);
#else
  freopen("ABC 266G.in", "r", stdin);
  freopen("ABC 266G.out", "w", stdout);
#endif
#endif

  std::ios::sync_with_stdio(false), cin.tie(NULL), cout.tie(NULL);
  return BlueQuantum::main();
}
